NCB ncb; int i; memset (&ncb, 0, sizeof (ncb)); i_strlen = strlen(LOCALNAME); if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ; memset (ncb.nbc_name, ' ', NCBNAMSZ); memcpy (ncb.nbc_name, LOCALNAME, i_strlen); ncb.ncb_command=NCBDELNAME; uRetCode = Netbios((NCB*) &ncb );В код проекта я внес некоторые изменения. Ну во-первых, сделал глобальной переменную NCB. В этом нет ничего плохого, всё равно memset её обнуляет. И это обязательно надо делать.
....... NCB ncb; .......Во-вторых, объявил глобальную переменную uRetCode
UCHAR uRetCode;Теперь я могу создать функцию, которая будет тестировать возврат и не делать это каждый раз при вызове команд.
void TestNetBiosOperation()
{
if ( uRetCode != 0 )
{
cout << "error " << endl;
exit(1);
}
}
Так как NCB глобальная можно создать функцию, которая будет вызывать команду NetBios и сразу тестировать результат.
void RunNetBiosCommand(UCHAR ncb_command)
{
ncb.ncb_command=ncb_command;
uRetCode = Netbios((NCB*) &ncb );
TestNetBiosOperation();
}
Так же я написал обещанную функцию GenerateNetBiosName.
void GenerateNetBiosName(unsigned char* chNetBiosName)
{
int i_strlen;
i_strlen = strlen(LOCALNAME);
if (i_strlen > NCBNAMSZ) i_strlen = NCBNAMSZ;
memset (chNetBiosName, ' ', NCBNAMSZ);
memcpy (chNetBiosName, LOCALNAME, i_strlen);
}
И процедура удаления имеет теперь вид.
void DeleteNetBiosName()
{
memset (&ncb, 0, sizeof (ncb));
GenerateNetBiosName(ncb.ncb_name);
RunNetBiosCommand(NCBDELNAME);
}
А добавления
void AddNetBiosName()
{
memset(&ncb, 0, sizeof (ncb));
GenerateNetBiosName(ncb.ncb_name);
ncb.ncb_lana_num = LANANUM;
RunNetBiosCommand(NCBADDNAME);
}
Всё можете посмотреть загрузив проект. Но код намного читабельнее. Общий вид программы Вот
void main()
{
ResetNetBios();
AddNetBiosName();
ViewNetBiosName();
DeleteNetBiosName();
cout << "Canсel" << endl;
getch();
}
Теперь нужно всё проверить. Скомпилируйте и запустите эту программу, потом не прекращая её запустите из предыдущего примера. У Вас должно быть примерно так.
Как видите в отличии от предыдущего примера несмотря на то, что программа не закончила работу её имени уже нет.